Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Disassembler</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Disassembler"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Disassembler rootpage-Disassembler skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Disassembler</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Ein <b>Disassembler</b> ist ein <a href="Computerprogramm" title="Computerprogramm">Computerprogramm</a>, das die <a href="Bin%C3%A4rcode" title="Binärcode">binär</a> kodierte <a href="Maschinensprache" title="Maschinensprache">Maschinensprache</a> eines ausführbaren Programmes in eine für Menschen lesbarere <a href="Assemblersprache" title="Assemblersprache">Assemblersprache</a> umwandelt. Seine Funktionalität ist der eines <a href="Assembler_(Informatik)" title="Assembler (Informatik)">Assemblers</a> entgegengesetzt.
</p>

<div class="mw-heading mw-heading2"><h2 id="Funktionsweise">Funktionsweise</h2></div>
<p>Zu jedem Prozessorbefehl existiert ein entsprechender Befehl in Assemblersprache, ein <a href="Assemblersprache#Beschreibung" title="Assemblersprache">Mnemonic</a>. Auch die einzelnen <a href="Argument_(Informatik)#Tatsächliche_Parameter_oder_Argumente" class="mw-redirect" title="Argument (Informatik)">Argumente</a> der Prozessorbefehle, wie <a href="Register_(Prozessor)" title="Register (Prozessor)">Registernummern</a> oder <a href="Speicheradresse" title="Speicheradresse">Speicheradressen</a>, lassen sich eins zu eins in Assemblercode übertragen. Ein Disassembler übersetzt also die binären Repräsentationen der Prozessorbefehle zurück in für Menschen lesbare Assemblersprache.
</p><p>Bei einem Programm, das in Assembler geschrieben wurde, lässt sich der ursprüngliche Code im Allgemeinen nachträglich nicht im Originaltext wiederherstellen, sondern lediglich funktional gleich. Pseudobefehle, <a href="Label_(Programmierung)" title="Label (Programmierung)">Labels</a> und <a href="Kommentar_(Programmierung)" title="Kommentar (Programmierung)">Kommentare</a> sind vom Programmierer gewählt und haben daher zumindest keine direkte, d.&nbsp;h. <a href="Bijektivit%C3%A4t" class="mw-redirect" title="Bijektivität">eindeutig umkehrbare</a> Entsprechung im Maschinencode, was die exakte textliche Rekonstruktion unmöglich macht. Bei einem Programm, das in einer <a href="H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höheren Programmiersprache</a> geschrieben wurde, hat der <a href="Compiler" title="Compiler">Compiler</a> meist verschiedene Optimierungen vorgenommen, welche die Programmausführung beschleunigen, aber den Maschinencode komplexer machen.
</p><p>Ein Disassemblat ist damit in der Regel deutlich schlechter lesbar als der ursprüngliche Assemblercode. Auch aus diesem Grund ist es bei komplexeren Programmabschnitten sinnvoll und üblich, die Disassemblierung nicht in einem einzigen Durchgang vollautomatisch vorzunehmen, sondern in Wiederholungen mit manuellen Zwischenschritten. Hierbei können aus schrittweiser Erfahrung und Erkenntnis zunehmend <a href="Bezeichner" title="Bezeichner">Bezeichner</a> für <a href="Sprungmarke" title="Sprungmarke">Sprungmarken</a>, <a href="Unterprogramm" title="Unterprogramm">Unterprogramme</a>, <a href="Variable_(Programmierung)" title="Variable (Programmierung)">Variablen</a>, <a href="Konstante_(Programmierung)" title="Konstante (Programmierung)">Konstanten</a> sowie Kommentare manuell verfeinert und zur Optimierung in nachfolgenden Durchläufen vorgegeben werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Nutzen">Nutzen</h2></div>
<p>Der Zweck eines Disassemblers liegt meistens darin, die Diagnose und das Auffinden von potenziellen Fehlern in einem Programm zu erleichtern oder die Ausgabe eines Compilers zu überprüfen. Oft wird er auch zum <a href="Reverse_Engineering" title="Reverse Engineering">Reverse Engineering</a> benutzt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Disassembler">Disassembler</h2></div>
<p>Eine Liste von Programmen, die verschiedene Modelle und Dateiformate verarbeiten können. Zum Teil auf <a href="GitHub" title="GitHub">GitHub</a> einsehbar.
</p>
<ul><li><a href="Ghidra" title="Ghidra">Ghidra</a> (plattformunabhängig)</li>
<li><a href="Interactive_Disassembler" title="Interactive Disassembler">IDA Pro</a></li>
<li>JEB decompiler</li>
<li>radare2</li>
<li>Binary Ninja</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Rechtliche_Aspekte">Rechtliche Aspekte</h2></div>
<p><a href="Propriet%C3%A4re_Software" title="Proprietäre Software">Proprietäre Software</a> steht oft unter einer <a href="EULA" class="mw-redirect" title="EULA">EULA</a>, die das Disassemblieren sowie <a href="Decompiler" title="Decompiler">Dekompilieren</a> untersagt. Dies ist jedoch in Deutschland nur in seltenen Fällen rechtlich bindend. Auch ist Reverse Engineering zur Herstellung von Kompatibilität mit der Software Dritter ausdrücklich gesetzlich gesichert erlaubt – und damit nicht durch einen Lizenzvertrag zu unterbinden.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Die Tätigkeit des Disassemblierens ist bei <a href="Urheberrecht" title="Urheberrecht">urheberrechtlich</a> geschützten Programmen allerdings in einigen Ländern durch gesetzliche Bestimmungen reglementiert, da das Disassemblieren die Möglichkeit eröffnet, den Code zu ändern und danach wieder in ein Programm zu assemblieren. So könnte z.&nbsp;B. von erfahrenen Assembler-Programmierern und <a href="Cracker_(Computersicherheit)" title="Cracker (Computersicherheit)">Crackern</a> eine Passwortabfrage entfernt, eine aus lizenzrechtlichen Gründen abgeschaltete Funktion aktiviert, oder ein Virus unbemerkt in das Programm eingeschleust werden. Ausführliche Erläuterungen zu diesem Aspekt von Disassemblern und vergleichbaren Werkzeugen finden sich im Artikel <a href="Reverse_Engineering" title="Reverse Engineering">Reverse Engineering</a>.
</p>
<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable" style="border-top-style: solid; border-top-width: 1px; clear: both; font-size:95%; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="Vorlage_Rechtshinweis"><div class="noviewer noresize nomobile" style="display: table-cell; padding-bottom: 0.2em; padding-left: 0.25em; padding-right: 1em; padding-top: 0.2em; vertical-align: middle;" aria-hidden="true" role="presentation"><span class="skin-invert" typeof="mw:File"></span></div>
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Bitte den Hinweis zu Rechtsthemen beachten!</div>
</div></div>
<div class="mw-heading mw-heading2"><h2 id="Sonstiges">Sonstiges</h2></div>
<p>Nahezu alle <a href="Debugger" title="Debugger">Debugger</a>, einige Programme zur Inspektion von Binärdateien (wie „objdump“ aus den <a href="GNU_Binutils" title="GNU Binutils">GNU Binutils</a>) sowie manche Assembler beinhalten einen Disassembler. Ein bekannter und häufig eingesetzter Disassembler ist <a href="The_Interactive_Disassembler" class="mw-redirect" title="The Interactive Disassembler">IDA</a> von Ilfak Guilfanov, der Assemblercode strukturiert anzeigen kann.
</p><p>Der Vorgang des Disassemblierens wird in der deutschsprachigen Fachliteratur <a href="Synonym" title="Synonym">synonym</a> mit den Begriffen „entassemblieren“ oder nicht ganz korrekt mit „entkompilieren“ bezeichnet. Letzteres würde korrekterweise das Dekompilieren meinen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">In Deutschland gemäß <span class="-print"><a rel="nofollow" class="external text" href="https://www.gesetze-im-internet.de/urhg/__69e.html">§&nbsp;69e</a></span> <a href="Gesetz_%C3%BCber_Urheberrecht_und_verwandte_Schutzrechte" class="mw-redirect" title="Gesetz über Urheberrecht und verwandte Schutzrechte">UrhG</a> (Dekompilierung)</span>
</li>
</ol>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.program-transformation.org/Transform/DisAssembly">transformation Wiki on disassembly</a></li>
<li><a rel="nofollow" class="external text" href="http://www.openrce.org/">OpenRCE: Various Disassembler Resources and Plug-ins</a></li>
<li><a rel="nofollow" class="external text" href="http://www.thefreecountry.com/programming/disassemblers.shtml">The free country</a></li></ul>
<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten">
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Normdaten&nbsp;(Sachbegriff): <a href="Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4817137-2">4817137-2</a></span> </div>
</div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-01-15" href="https://de.wikipedia.org/wiki/?title=Disassembler&amp;oldid=241198758">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>